package Graficos;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import Mapa.*;
import Objetos.*;
import Personajes.*;
import TDA_Lista.Position;

import javax.swing.*;

public class Mapa_Grafico extends JPanel{
	protected Mapa_Logico mapa;
	protected Mario mario;
	protected ImageIcon misil;
	
	public Mapa_Grafico(Mapa_Logico m){
		mapa = m;
		mario = mapa.obtenerMario();
		this.setOpaque(false);
		this.setDoubleBuffered(true);
		misil = new ImageIcon(getClass().getResource("/Imagenes/Objetos/misil.png"));
	}
	
	private void dibujarFondo(Graphics g){
		ImageIcon imagen = new ImageIcon(getClass().getResource("/Imagenes/Objetos/fondo.png"));
		g.drawImage(imagen.getImage(),0,0,imagen.getIconWidth(),imagen.getIconHeight(),this);
	}
	
	private void dibujarObjetos(Graphics g){
		for(Position<Objeto> Po : mapa.obtenerObjetos().positions()){
			Objeto o = Po.element();
			if((o.obtenerX() >= mapa.getPosicionX1() - 160)&&(o.obtenerX() < mapa.getPosicionX2())){
				ImageIcon imagen = o.getRG().obtenerImagen();
				g.drawImage(imagen.getImage(),o.obtenerX() - mapa.getPosicionX1(),o.obtenerY(),imagen.getIconWidth(),imagen.getIconHeight(),this);
			}
			else{
				if(o.obtenerX() < mapa.getPosicionX1() - 160){
					mapa.removerObjeto(Po);
				}
			}
		}
	}
	
	private void dibujarEnemigos(Graphics g){
		for(Enemigo p : mapa.obtenerEnemigos()){
			if((p.obtenerX() >= mapa.getPosicionX1() - 160)&&(p.obtenerX() < mapa.getPosicionX2())){
				ImageIcon imagen = p.getRG().obtenerImagen();
				g.drawImage(imagen.getImage(),p.obtenerX() - mapa.getPosicionX1(),p.obtenerY(),imagen.getIconWidth(),imagen.getIconHeight(),this);
			}
		}
	}
	
	private void dibujarItems(Graphics g){
		for(Item i : mapa.obtenerItems()){
			if((i.obtenerX() >= mapa.getPosicionX1() - 160)&&(i.obtenerX() < mapa.getPosicionX2())){
				ImageIcon imagen = i.getRG().obtenerImagen();
				g.drawImage(imagen.getImage(),i.obtenerX() - mapa.getPosicionX1(),i.obtenerY(),imagen.getIconWidth(),imagen.getIconHeight(),this);
			}
		}
	}
	
	private void dibujarMario(Graphics g){
		ImageIcon imagen = mario.getRG().obtenerImagen();
		g.drawImage(imagen.getImage(),mario.obtenerX() - mapa.getPosicionX1(),mario.obtenerY(),imagen.getIconWidth(),imagen.getIconHeight(),this);
	}
	
	private void dibujarInfo(Graphics g){
		g.setColor(Color.BLACK);
		g.setFont(new Font("CenturySchoolbook Bold",Font.BOLD,25));
		g.drawString("PUNTAJE: "+mario.getPuntaje()+" VIDAS: "+mario.getVidas(), 20, 30);
		if(mario.getBombaNuclear()){
			g.drawImage(misil.getImage(),20,50,misil.getIconWidth(),misil.getIconHeight(),this);
		}
		if(mario.esEstrella()){
			g.setColor(Color.RED);
			g.drawString("INVENCIBLE: "+mario.tiempoEstrella(), 400, 30);
		}
		else{
			if(mario.esInvencible()){
				g.setColor(Color.RED);
				g.drawString("RECUPERANDOSE DE ATAQUE: "+mario.tiempoInvencible(), 400, 30);
			}
		}
	}
	
	public void paint(Graphics g){
		dibujarFondo(g);
		dibujarInfo(g);
		dibujarObjetos(g);
		dibujarEnemigos(g);
		dibujarItems(g);
		dibujarMario(g);
	}
	
}
